package com.qp;

import com.qp.opc.OpcUaClientFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class CsvToClass {
    //日志
    private static final Logger log = LoggerFactory.getLogger(OpcUaClientFactory.class);

    public static void main(String[] args) {
        try {
            File file = new File("C:\\Users\\37576\\Desktop\\test\\Chelun_Zhijia_Product.csv");
            String prefix = "Jiao_Mokuai_PLC.Jiao_Mokuai_Product.";


            List<String> lines = Files.readAllLines(Paths.get(file.getAbsolutePath()));
            String className = toClass(file.getName());
            String s = createClass(className, prefix, lines);
            File classFile = new File(file.getParentFile().getAbsolutePath() + "\\" + className + ".java");
            if (classFile.exists()) {
                classFile.delete();
            }
            Files.write(Paths.get(classFile.getAbsolutePath()), s.getBytes());
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }


    public static String createClass(String className, String prefix, List<String> lines) {
        StringBuilder s = new StringBuilder();
        String key;
        String var;
        String name;
        String type;
        s.append("public enum ").append(className).append("{");
        for (int i = 1; i < lines.size(); i++) {
            String[] ts = lines.get(i).split(",");
            key = trim(ts[0]);
            var = toVar(key);
            type = trim(ts[2]);
            name = trim(ts[ts.length - 1]);
            s.append("\n    ");
            if (i > 1) {
                s.append(",");
            }
            s.append(var).append("(\"").append(prefix).append(key).append("\",\"").append(type).append("\",\"").append(name).append("\")");
        }
        s.append(";").append("\r\n").append("\r\n");
        s.append("    //变量名").append("\r\n");
        s.append("    private String opcKey;").append("\r\n");
        s.append("    //变量类型").append("\r\n");
        s.append("    private String type;").append("\r\n");
        s.append("    //变量说明").append("\r\n");
        s.append("    private String opcDesc;").append("\r\n").append("\r\n");

        s.append("    /**").append("\r\n");
        s.append("     * 取得变量名").append("\r\n");
        s.append("     */").append("\r\n");
        s.append("    public String getOpcKey() {").append("\r\n");
        s.append("        return opcKey;").append("\r\n");
        s.append("    }").append("\r\n").append("\r\n");
        s.append("    /**").append("\r\n");
        s.append("     * 取得类型").append("\r\n");
        s.append("     */").append("\r\n");
        s.append("    public String getType() {").append("\r\n");
        s.append("        return type;").append("\r\n");
        s.append("    }").append("\r\n").append("\r\n");
        s.append("    /**").append("\r\n");
        s.append("     * 取得变量说明").append("\r\n");
        s.append("     */").append("\r\n");
        s.append("    public String getOpcDesc() {").append("\r\n");
        s.append("        return opcDesc;").append("\r\n");
        s.append("    }").append("\r\n").append("\r\n");

        s.append("    /**").append("\r\n");
        s.append("     * 初始化").append("\r\n");
        s.append("     */").append("\r\n");
        s.append("    ").append(className).append("(String opcKey,String type,String opcDesc){").append("\r\n");
        s.append("        this.opcKey = opcKey;").append("\r\n");
        s.append("        this.type = type;").append("\r\n");
        s.append("        this.opcDesc = opcDesc;").append("\r\n");
        s.append("    }").append("\r\n");
        s.append("}").append("\r\n");
        return s.toString();
    }

    private static String trim(String value) {
        String temp = value;
        if (temp.startsWith("\"") || temp.startsWith("'")) {
            temp = temp.substring(1);
        }
        if (temp.endsWith("\"") || temp.endsWith("'")) {
            temp = temp.substring(0, temp.length() - 1);
        }
        return temp;
    }

    private static String toVar(String value) {
        String temp = value.toUpperCase();
        temp = temp.replaceAll("-", "_");
        return temp;
    }

    private static String toClass(String value) {
        String temp = value.trim();
        temp = temp.replaceAll("-", "_");
        if (temp.contains(".")) {
            int idx = temp.indexOf(".");
            temp = temp.substring(0, idx);
        }
        String[] names = temp.split("_");
        StringBuilder s = new StringBuilder();
        for (String name : names) {
            if (name.length() > 0) {
                if (name.length() > 1) {
                    s.append(name.substring(0, 1).toUpperCase()).append(name.substring(1).toLowerCase());
                } else {
                    s.append(name.substring(0, 1).toUpperCase());
                }
            }
        }
        return s.toString();
    }
}